#!/usr/bin/python3.8
# -*- coding:UTF-8 -*-


from datetime import datetime
import logging
import os
import sys
import threading
import time
from queue import Queue
BASH_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
print(BASH_DIR)
sys.path.append(BASH_DIR)
from local_tender_peoject.tender_project.base_spider import BaseSpider
from local_tender_peoject.tender_project.conf.conf_util import upload_image_delete_pic2
from local_tender_peoject.tender_project.conf.database import DATABASE
from local_tender_peoject.tender_project.conf.dber import MongoDBer
from local_tender_peoject.tender_project.conf.logging_debug import MyLogging
from local_tender_peoject.tender_project.selenium_downloader import ChromeHeadlessDownloader

# 批量更新
class jietu(BaseSpider):
    def __init__(self, db_name, table_name):
        super(jietu, self).__init__()
        self.headers = {
            # "Cookie": "JSESSIONID=325F32A63F535B0ECC371B5881FAAE44; jfe_pin=edb5223c; jfe_ts=1667356652.668; jfe_sn=cj4oWRHJrJdcLhbDnSWPd5qP5hU=",
            'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36",
        }
        self.params_queue = Queue(maxsize=10)  # 筛选队列
        self.detail_queue = Queue(maxsize=100)  # 数据队列
        self.index_status = True  # 索引是否添加
        self.screen_queue = Queue(maxsize=100)  # url队列  用来截图
        self.local = threading.local()
        self.db_m = MongoDBer(DATABASE[db_name])  # mongodb 库连接对象
        self.table_name = table_name
        self.jietu = self.db_m[table_name]
        self.xpaths = ["//div[@class='content-table table-responsive-sm']"]
        # 日志
        self.m = MyLogging(self.__class__.__name__, debug_level=logging.INFO, write_level=logging.INFO).logging
        self.myself_ip = self.get_myself_ip()  # 获得本机ip
        self.create_indexes()
        self.send_request_selenium = ChromeHeadlessDownloader(max_=3)

    def get_params(self):
        """
        获取筛选参数的流程
        """
        jietu_table_1 = ['anhui_zhaobiaotoubiao', 'quanguo_neimenggu', 'quanguo_tianjin', 'quanguo_shanxi', 'zhejianggonggongziyuan', 'quanguo_heibeisheng', 'quanguo_jiangsusheng2', 'zhejiangzhengfucaigou', 'quanguo_beijing2', 'beijinggongcheng3', 'quanguo_hainan', 'lzl_zx_hunan_data', 'lzl_zx_data_hns', 'lzl_zx_datas', 'lzl_jiangxi_data', 'qghn_data', 'lzl_zx_qg_hbs_data', 'lzl_zx_shanghai_data', 'lzl_zx_shanghai_wyh_data', 'lzl_guangdong_wenhua_data', 'quanguo_shanxi_linfen', 'lzl_pingdingshan_publish_data', 'lzl_zx_zhejiang_qg_data', 'lzl_hengyang_publish_data', 'lzl_jinzhou_publish_data', 'lzl_enshi_publish_data', 'lzl_changde_publish_data', 'henanzhaotoubiao_data', 'Jiaozuoggzy_info', 'Luoheggzy_info', 'Zhumadianggzy_info', 'guangzhou', 'lzl_xiantao_publish_data', 'lzl_xiaogan_zhengwu_data', 'zzggzy_data', 'fujiangonggongziyuan', 'fujiangonggongdianzi_history2', 'fujiangonggongdianzi2', 'jilinzhengfucaigouwang_data', 'shanxi_caigou_data', 'neimengguzizhiquzhengfucaigou_data', 'yangguangcaigoufuwupingtai_data', 'guizhou_caigou_data', 'zyzsjgcg_data', 'bjzfcg_data', 'a_shandongshengshuiligongchengzhaobiaotoubiao_GGFWPT_detail', 'wjb_data', 'shzfcgw_data', 'chongqingshizhengfucaigouwang_data', 'hebeishengjiaotongyunshuting_data', 'a_guangzhougonggongziyuanjiaoyiGGFWPT_detail', 'tianjinshizhengfucaigouzhongxin_data', 'hunanzhengfucaigouwang_data', 'shandongshengzhengfucaigouwang_data', 'a_luoyangggzy_detail', 'a_nanyangggzy_detail', 'a_zhoukouggzy_detail', 'a_sanmenxiaoggzy_detail', 'a_xuchangggzy_detail', 'a_zhengzhouhangkonggangggzy_detail', 'a_shangqiuggzy_detail', 'a_xinyangggzy_detail', 'a_xiangyangggzy_detail', 'a_huangshiggzy_detail', 'a_xiaoganggzy_detail', 'a_suizhouggzy_detail', 'a_shennongjiaggzy_detail', 'a_guangzhougonggongziyuanjiaoyiGGFWPT_detail', 'a_shandongshengshuiligongchengzhaobiaotoubiao_GGFWPT_detail', 'a_changsha_jiaoyipingtai_detail', 'a_zhuzhouggzy_detail', 'a_yueyangggzy_detail', 'a_chenzhouggzy_detail', 'a_yongzhouggzy_detail', 'a_huaihuashiggzy_detail', 'hebigongongziyuan_data', 'shenzhenggzy_data', 'gjnyzbw_data', 'jiangsushengshuiliting_data', 'shandongshenggonggongziyuanjiaoyizhongxin_data', 'hubeishengjiaotongyunshuting_data']
        jietu_name_1 = ['安徽省招标投标信息网', '内蒙古自治区公共资源交易网', '全国公共资源交易平台（天津市）', '全国公共资源交易平台（山西省）', '浙江省公共资源交易', '全国公共资源交易平台（河北省）', '全国公共资源交易平台（江苏省）', '浙江政府采购网', '全国公共资源交易平台（北京市）', '北京工程建设交易信息网', '全国公共资源交易平台（海南省）', '湖南省公共资源交易中心', '河南省公共资源交易中心', '湖北省电子招投标交易平台', '江西公共资源交易网', '全国公共资源交易平台(河南省)', '全国湖北省公共资源交易平台', '上海市建设工程住宅修缮工程招投标电子化交易平台', '上海市住房和城乡建设管理委员会', '广东省文化公共资源服务平台', '全国公共资源交易平台(山西省·临汾市)', '平顶山市公共资源交易中心', '浙江省全国公共资源交易平台网站', '衡阳市公共资源交易中心', '荆州市公共资源交易信息网', '恩施土家族苗族自治州公共资源交易中心', '常德市公共资源交易平台', '河南招标网', '焦作市公共资源交易中心', '漯河市公共资源交易中心', '驻马店公共资源交易平台', '广州公共资源交易中心', '仙桃市公共资源交易中心', '孝感市政务服务和大数据管理局', '郑州市公共资源交易中心', '福建省公共资源交易网', '福建招标与采购网', '福建省公共资源交易电子公共服务平台', '吉林省公共资源交易中心（吉林省政府采购中心）', '山西省政府采购网', '内蒙古自治区政府采购网', '阳光采购服务平台', '贵州省政府采购网', '中共中央直属机关采购中心', '北京市政府采购网', '山东省水利工程招标投标公共服务平台', '外交部服务中心集中采购中心', '上海政府采购网', '重庆市政府采购网', '河北省交通运输厅', '广州公共资源交易公共服务平台', '天津市政府采购中心', '中国湖南政府采购网', '中国山东政府采购网', '全国公共资源交易平台（河南省洛阳市）', '全国公共资源交易平台（河南省南阳市）', '全国公共资源交易平台（河南省周口市）', '全国公共资源交易平台（河南省三门峡市）', '全国公共资源交易平台（河南省许昌市）', '全国公共资源交易平台（河南省郑州航空港经济实验区）', '全国公共资源交易平台（河南省商丘市）', '全国公共资源交易平台（河南省信阳市）', '襄阳市公共资源交易平台', '全国公共资源交易平台(湖北省·黄石市)', '孝感市公共资源交易中心', '随州市公共资源交易中心', '神农架林区公共资源交易中心', '广州公共资源交易公共服务平台', '山东省水利工程招标投标公共服务平台', '长沙公共资源交易电子服务平台', '株洲市公共资源交易平台', '岳阳市公共资源交易网', '郴州市公共资源交易中心', '永州市公共资源交易中心', '怀化市公共资源交易中心', '鹤壁市公共资源交易中心', '全国公共资源交易平台（广东·深圳市）', '国家能源招标网', '江苏省水利厅', '山东省公共资源交易中心', '湖北省交通运输厅']

        for i in range(len(jietu_name_1)):
            data_dict = {
                "tbale_source_name": jietu_name_1[i],
                "tbale_name": jietu_table_1[i],
                "status": 0,
            }
            sql_res = self.jietu.find_one({
                "tbale_source_name": jietu_name_1[i],
                "tbale_name": jietu_table_1[i],
                "status": 0,
            })
            if not sql_res:
                self.jietu.insert_one(data_dict)


    def create_indexes(self):
        if self.index_status:
            temp_url_index = True
            temp_status_index = True
            industry_status_index = True
            update_time_index = True
            html_id_index = True
            html_index = True
            for index in self.jietu.list_indexes():
                if "originalurl" in index["name"]:
                    temp_url_index = False
                    continue
                if "status" in index["name"]:
                    temp_status_index = False
                    continue
                if "industry" in index["name"]:
                    industry_status_index = False
                if "update_time" in index["name"]:
                    update_time_index = False
                if "html" in index["name"]:
                    html_index = False
            if temp_url_index:
                self.jietu.create_index([("originalurl", 1), ("html_id", 1)], unique=True, background=True)
            if temp_status_index:
                self.jietu.create_index([("status", 1)], background=True)
                self.jietu.create_index([("image_status", 1)], background=True)
            if industry_status_index:
                self.jietu.create_index([("SnapShot", 1), ("ifbprogress", 1)],
                                         background=True)
                self.jietu.create_index(
                    [("industry", 1), ("SnapShot", 1), ("ifbprogress", 1), ("image_status", 1)], background=True)
                self.jietu.create_index(
                    [("SnapShot", 1), ("image_status", 1), ("ifbprogress", 1)], background=True)
            if update_time_index:
                self.jietu.create_index([("update_time", 1)], background=True)
            if html_index:
                self.jietu.create_index([("html", 1)], background=True)
            self.index_status = False


    def screen_shot_product(self):
        """ 截图的生产者线程 """
        self.m.info('%s:::获取截图的生产者线程开启' % datetime.now())
        i = 0
        # self.jietu.update_many({"SnapShot": "", "image_status": 1, "ifbprogress": "中标公告"}, {"$set": {"image_status": 0}})
        # print('更新完毕')
        while True:
            try:
                one_data = self.jietu.find_one_and_update(
                    {"SnapShot": "", "image_status": 0, "ifbprogress": "中标公告"},
                    {"$set": {"image_status": 1}},
                    {"_id": 1, "originalurl": 1, "text_xpath": 1})
                if not one_data:
                    self.m.info('%s:::截图的生产者线程结束' % datetime.now())
                    break
                self.screen_queue.put(one_data)
                # if flag:
                #     break
            except Exception as err:
                if i >= 5:
                    self.m.error('%s:::截图的生产者异常结束 err info: %s' % (datetime.now(), err))
                    break
                i += 1
                time.sleep(3)
        for i in range(self.thread_num):
            self.screen_queue.put(None)

    def screen_shot_consumer(self):
        image_xpath_dict = {'anhui_zhaobiaotoubiao':'//div[@class="detailCon"]//p[3]', "quanguo_neimenggu":'//h6', 'hefeiggzy_data':'//div[@class="ewb-project-notice"]|//h3'}
        while True:
            result = self.screen_queue.get()
            print(self.table_name)
            if not result:
                print("upload_images结束")
                # 把状态改掉
                jietu_object = db_m['jietu_pingtai_data']
                jietu_object.update_many({'tbale_name':self.table_name}, {'$set':{'status':2}})
                break
            print(result["originalurl"])
            url, ids = result["originalurl"], result["_id"]
            image_xpath = image_xpath_dict.get(self.table_name, '')
            print(image_xpath)
            if image_xpath:
                try:
                    upload_image_delete_pic2(url=url, coll_name=self.jietu, id=ids, text_xpath=image_xpath, send_request_selenium=self.send_request_selenium)
                except:
                    continue


    def run_thread_list(self):
        self.thread_name_list = [
            self.screen_shot_product  #获取截图的生产者
        ]
        self.more_thread_name_list = [
            self.screen_shot_consumer         #获取截图的消费者
        ]


if __name__ == '__main__':
    # db_name = 'test_gu'
    #把所有状态为1的改为0
    # jietu.get_params()
    db_m = MongoDBer(DATABASE['liuzilong'])  # mongodb 库连接对象
    jietu_object = db_m['jietu_pingtai_data']
    jietu_object.update_many({'status': 1}, {'$set': {'status': 0}})
    table_name = jietu_object.find_one_and_update({'status': 0}, {'$set': {'status': 1}})
    table_name['tbale_name'] = 'hefeiggzy_data'
    print(table_name['tbale_name'])
    jietu = jietu('lizhiheng', table_name['tbale_name'])
    jietu.run()
